'use strict';
const db = uniCloud.database();
const table='task';
// const dbCmd = db.command
// const $ = db.command.aggregate
const uniID = require('uni-id')
exports.main = async (event, context) => {
	// 云函数url，把body转为event所需
	// let body = event.body
	// if(body){
	// 	let token = event.headers.uniidtoken
	// 	if(event.isBase64Encoded){
	// 		body = Buffer.from(body)
	// 	}
	// 	const param = JSON.parse(body) // param为客户端上传的数据
	// 	if(param){
	// 		event = param
	// 		event.uniIdToken = token
	// 	}
	// }
	const action = event.cloudAction
	let params = event.params || {}
	
	let payload = {}
	let noCheckAction = []//白名单，无需校验token
	//如果不在白名单里，要校验token
	//用token获取userid，而不是前端传递过来不安全的参数
	if (noCheckAction.indexOf(action) === -1) {
		//如果没有token
		if (!event.uniIdToken) {
			return {
				code: 403,
				msg: '缺少token'
			}
		}
		payload = await uniID.checkToken(event.uniIdToken)// uniID校验token
		//code不为0代表token校验未通过
		if (payload.code && payload.code > 0) {
			return payload
		}
		//token校验成功后从云端获得uid
		params.userid = payload.uid
	}
	
	switch(action){
		case "show":
			var id=params.id;
			var collection = db.collection(table)
			var res = await collection.where({
				_id:id
			}).limit(1).get();
			//获取作者的相关信息
			var employerId=res.data[0].employerId;
			var workerId=res.data[0].workerId;
			var tb_user=db.collection("uni-id-users");
			var employer = await tb_user.where({
				_id:employerId
			}).limit(1).get();
			var worker = await tb_user.where({
				_id:workerId
			}).limit(1).get();
			//把文章信息作者信息一起返回
			return {
				error:0,
				data:{
					task:res.data[0],
					employer:employer.data[0],
					worker:worker.data[0]
				},
			};
			break;
		case "add":
		//编辑页的数据获取，其实和详情可以用一个代码
			var id=params.id;
			var collection = db.collection(table)
			var res = await collection.where({
				_id:id
			}).limit(1).get();
			// var userid=params.ssuserid;
			// delete params.ssuserid;
		 
			if(res.data.length<1){
				return {
					error:1,
					message:"数据不存在"
				}
			}
			if(res.data[0].employerId!=params.userid){
				return {
					error:1,
					message:"您无权限"  
				}
			}
			return {
				error:0,
				data:res,
			};
			break;
		//添加新任务和修改任务都用这个
		case "save":
			var collection = db.collection(table)
			//如果是已有任务，上传时多个id参数，那就修改，修改比直接添加多了个参数 任务_id
			if(event.id){
				
				params.employerId=params.userid;
				delete params.userid;
				var res = await collection.doc(event.id).update(params)
			}else{  
				params.employerId=params.userid;
				delete params.userid;
				var res = await collection.add(params)
			}
			return {
				error:0,
				data:res,
			};
			break;
		case "delete":
			var id=params.id;
			var collection = db.collection(table)
			var res = await collection.doc(id).remove();
			// 应当把对应文章的评论数据也全部删掉，但这里没删
			return {
				error:0,
				data:"success",
			};
			break;
		case "addView":
			var _id=params.id;
			var collection = db.collection(table)
			var row = await collection.where({
				_id:_id
			}).limit(1).get();
			
			if(row.data.length<1){
				return {
					error:1,
					message:"数据不存在"
				}
			}
			if(row.data[0].view_num==undefined){
				var view_num=1;
			}else{
				var view_num=row.data[0].view_num+1;
			}
			var res = await collection.doc(_id).update({
				view_num:view_num
			})
			return {
				error:0,
				data:"success",
			};
			break;
		default:
			return {
				code: 403,
				msg: '非法访问'
			}
			break;
	}
};
